// Lorin错误信息类型
import 'package:bluetooth_protocols_plugin/src/tools/extension_enum.dart';

enum LorinErrorType {
  // 故障 32 位
  iPhaseSensor(79, "iPhaseSensor"), // 0 相电流传感器正常   1 相电流传感器故障
  iBusSensor(78, "iBusSensor"), // 0 总电流传感器正常   1 总电流传感器故障
  motorHall1(77, "motorHall1"), // 0 电机霍尔1正常      1 电机霍尔1故障
  motorHall2(76, "motorHall2"), // 0 电机霍尔2正常      1 电机霍尔2故障
  batteryError(75, "batteryError"), // 0 电池正常           1 电池故障（电池内部报错）
  imuSensor(74, "imuSensor"), // 0 姿态传感器正常     1 姿态传感器故障
  mcComm1(73, "mcComm1"), // 0 驱动器通讯正常     1 驱动器通讯故障（人机板无法收到驱动板数据）
  mcComm2(72, "mcComm2"), // 0 驱动器通讯正常     1 驱动器通讯故障（驱动板无法收到人机板数据）
  bleComm1(71, "bleComm1"), // 0 蓝牙板通讯正常     1 蓝牙板通讯故障（人机板无法收到蓝牙板数据）
  bleComm2(70, "bleComm2"), // 0 蓝牙板通讯正常     1 蓝牙板通讯故障（蓝牙板无法收到人机板数据）
  batteryCommLost(69, "batteryCommLost"), // 0 电池-驱动板通讯正常1 电池-驱动板通讯故障
  batteryCrossCommLost(68, "batteryCrossCommLost"), // 0 电池间通讯正常     1 电池间通讯故障
  mosTempSensor(67, "mosTempSensor"), // 0 MOS 温控正常       1 MOS 温控故障
  motorTempSensor(66, "motorTempSensor"), // 0 电机温控正常       1 电机温控故障
  boardTempSensor(65, "boardTempSensor"), // 0 主板高温区温控正常 1 主板高温区温控故障
  fan(64, "fan"), // 0 散热风扇正常       1 散热风扇故障
  rtc(63, "rtc"), // 0 RTC模块正常        1 RTC 模块故障
  extRom(62, "extRom"), // 0 外部存储器正常     1 外部存储器故障
  vBusSensor(61, "vBusSensor"), // 0 总电压传感器正常   1 总电压传感器故障
  vBatterySensor(60, "vBatterySensor"), // 0 电池电压传感器正常 1 电池电压传感器故障
  cannotPowerOff(59, "cannotPowerOff"), // 0 未发现无法断电异常 1 无法正常断电故障
  cannotCharge(58, "cannotCharge"), // 0 未发现无法充电故障 1 无法充电故障
  errorReserve(-2, "errorReserve"), // 0 保留 16bit

  //警告 48 位
  underVoltage(47, "underVoltage"), // 0 电压（母线）正常   1 欠压警告
  overVoltage(46, "overVoltage"), // 0 电压（母线）正常   1 过压警告
  overCurrent(
      44, "overCurrent"), // 0 电流（母线）正常   1 电流过大警告   2 低电骑行电流过大警告  3 低电推行电流过大警告
  lowBattery(42, "lowBattery"), // 0 电量正常           1~3 低电等级1~3
  mosOverTemp(41, "mosOverTemp"), // 0 MOS温度正常        1 MOS温度过高警告
  motorOverTemp(40, "motorOverTemp"), // 0 电机温度正常       1 电机温度过高警告
  boardOverTemp(39, "boardOverTemp"), // 0 主板高温区温度正常 1 主板高温区温度过高警告
  cpuOverTemp(38, "cpuOverTemp"), // 0 CPU 温度正常       1 CPU 温度过高警告
  imuOverTemp(37, "imuOverTemp"), // 0 IMU 温度正常       1 IMU 温度过高警告
  overSpeed(36, "overSpeed"), // 0 未超速             1 超速警告
  outputSaturation(35, "outputSaturation"), // /0 矢量电压未饱和     1 矢量电压饱和警告
  motorSpin(34, "motorSpin"), // 0 未空转             1 空转警告
  motorStall(33, "motorStall"), // 0 电机未堵转         1 电机堵转警告
  postureError(32, "postureError"), // 0 骑行时姿态正常     1 倾角过大警告

  riskBehaviour(31, "riskBehaviour"), // 0 骑行状态正常       1 危险骑行动作警告
  motorNoLoad(30, "motorNoLoad"), // 0 未检测到空载       1 电机空载保护警告
  noSelfTest(29, "noSelfTest"), // 0 已通过必要的自检   1 存在必要的自检项未进行或未通过警告
  powerKeyLongPress(28, "powerKeyLongPress"), // 0 电源按键未发现异常 1 电源按键被长时间按下警告
  someBatteriesNotWork(27, "someBatteriesNotWork"), // 0 未发现有电池不工作 1 有部分电池未工作警告
  batteryCaliError(26, "batteryCaliError"), // 0 未发现电池电压校准异常 1 电池电压校准异常警告
  batteryWarning(25, "batteryWarning"), // 0 电池无报警         1 电池报警
  batteryProtect(24, "batteryProtect"), // 0 电池未保护         1 电池保护
  chargeOverCurrent(
      23, "chargeOverCurrent"), // /0 充电未过流         1 充电过流（由驱动板检测的过流）
  dcOutputOverCurrent(22, "dcOutputOverCurrent"), // 0 直流输出口未过流   1 直流输出口过流
  swCombination(21, "swCombination"), // 0 未发现软件不匹配   1 各组件软件不匹配警告
  forceDfu(20, "forceDfu"), // 0 无强制固件升级     1 强制固件升级警告
  deviceLock(19, "deviceLock"), // 0 未锁定             1 车辆已被锁定警告
  hwCombination(18, "hwCombination"), // 0 未发现硬件不匹配   1 各组件硬件不匹配警告
  fanLowSpeed(17, "fanLowSpeed"), // 0 未发现风扇转速过低 1 风扇转速过低警告（会使前灯最大亮度被迫降低）
  hwOverCurrent(16, "hwOverCurrent"), // 0 未出现硬件过流     1 硬件过流保护
  warningReserve2(-1, "warningReserve2"); // 保留 10bit

  final int rawValue;
  final String name;
  const LorinErrorType(this.rawValue, this.name);
  // 通过 title 获取枚举类型
  static LorinErrorType? getTypeByTitle(String title) => LorinErrorType.values
      .firstWhereOrNull((activity) => activity.name == title);
  // 通过 rawValue 获取枚举类型
  static LorinErrorType? getTypeByNum(int rawValue) => LorinErrorType.values
      .firstWhereOrNull((activity) => activity.rawValue == rawValue);
  // 通过 rawValue 获取 title
  static String? getValue(int rawValue) => LorinErrorType.values
      .firstWhereOrNull((activity) => activity.rawValue == rawValue)
      ?.name;
}
